package control;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JDialog;

import model.nota.Nota;
import model.registro.RegistroNotasDAO;
import model.registro.TurmaProfessor;
import view.NotaMensagens;
import view.RegistroNotasFrame;
import ModeloAcademico.Alunos;
import ModeloAcademico.ModeloTurma;
import ModeloAcademico.ProfessoeBeen;

public class RegistroNotasControle implements ActionListener {

	private RegistroNotasFrame view;
	private RegistroNotasDAO dao;

	private ProfessoeBeen professor;
	private ModeloTurma turma;
	private TurmaProfessor turmaProfessor;

	public RegistroNotasControle() {
		dao = new RegistroNotasDAO();
	}

	public void exibirTela() {
		JDialog.setDefaultLookAndFeelDecorated(true);
		view = new RegistroNotasFrame(this);
		view.carregarComboProfessores(carregarProfessores());
		view.exibir();
	}

	public List<ProfessoeBeen> carregarProfessores() {
		List<ProfessoeBeen> professores = dao.listarProfessores();
		return professores;
	}

	public List<ModeloTurma> carregarTurmas(ProfessoeBeen professor) {
		return dao.listarTurmas(professor);
	}

	public List<Alunos> carregarAlunos(ModeloTurma turma) {
		return dao.listarAlunos(turma);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("salvar_notas")) {
			
			if (view.getDescricaoNota() != null && !view.getDescricaoNota().equals("")) {
				String descricaoNota = view.getDescricaoNota();
				int coluna = view.getModelo().findColumn(descricaoNota);
				
				List<Nota> notas = montarNotasAlunos();
				int qtdTuplas = view.getModelo().getRowCount();
				for (int linha = 0; linha < qtdTuplas; linha++) {
					notas.get(linha).setDescricao(descricaoNota);
					
					String value = (String) view.getModelo().getValueAt(linha, coluna);
					notas.get(linha).setValor(Float.parseFloat(value));
				}
				dao.salvarNotas(notas);

				view.setCount(0);
				NotaMensagens.registroSalvoSucesso(view.getDescricaoNota());
				view.setDescricaoNota("");
				
			} else {
				NotaMensagens.notaInexistente();
			}

		}

		if (e.getActionCommand().equals("professores")) {
			if (!((RegistroNotasFrame) view).getComboProfessor()
					.getSelectedItem().equals("Selecione...")) {
				professor = (ProfessoeBeen) ((RegistroNotasFrame) view)
						.getComboProfessor().getSelectedItem();
				((RegistroNotasFrame) view)
						.carregarComboTurmas(carregarTurmas(professor));
			}
		}

		if (e.getActionCommand().equals("turmas")) {
			if (!((RegistroNotasFrame) view).getComboTurma().getSelectedItem()
					.equals("Selecione...")) {
				turma = (ModeloTurma) ((RegistroNotasFrame) view)
						.getComboTurma().getSelectedItem();
				view.carregarCurso(turma.getCurso());
				((RegistroNotasFrame) view)
						.carregarAlunos(carregarAlunos(turma));
				turmaProfessor = dao.carregarTurmaProfessor(professor, turma);
				//CARREGAR TODAS AS NOTAS EXISTENTES NA TABELA DO BANCO
				List<Nota> notas = montarNotasAlunos();
//				view.carregarNotas(dao.carregarNotas(notas));
			}
		}

	}
	
	public List<Nota> montarNotasAlunos(){
		List<Nota> notas = new ArrayList<Nota>();
		int qtdTuplas = view.getModelo().getRowCount();
		for (int linha = 0; linha < qtdTuplas; linha++) {
			
			Nota nota = new Nota();
			
			Alunos aluno = new Alunos();
			aluno.setMatricula(view.getModelo().getValueAt(linha, 0).toString().trim());
			aluno = dao.carregarIdAluno(aluno);
			
			nota.setTurmaProfessor(turmaProfessor);
			nota.setAluno(aluno);
			notas.add(nota);
		}
		return notas;
	}

}
